﻿Imports CrystalDecisions.CrystalReports.Engine

Public Class CViewer
    Public Shared Sub InPhieu(ByVal DPNX_ID As Integer)
        Dim objSelectedPhieu As CPhieuNX = CPhieuNXs.GetPhieuByMa(DPNX_ID)
        Dim strSql As String
        strSql = "select * from viewNhapXuat where DPNX_ID = " & objSelectedPhieu.DPNX_ID.ToString()
        strSql &= " order by ten, ma, code"
        Dim ds As DataSet
        Dim countMH, countKho As Integer
        Dim rowCount As Integer = 0
        ds = BaseDB.ExecSql_DataSet(strSql)
        countMH = ds.Tables(0).Rows.Count
        strSql = "select distinct kho from viewNhapXuat where DPNX_ID = " & objSelectedPhieu.DPNX_ID.ToString()
        countKho = BaseDB.ExecSql_DataSet(strSql).Tables(0).Rows.Count
        Dim ten_dvgn, ten_lk, ten_tcnx As String
        ten_dvgn = CDoiTuongs.GetDoiTuongByMa(enumDOITUONG.DONVI, objSelectedPhieu.DVGN).Ten
        ten_lk = CDoiTuongs.GetDoiTuongByMa(enumDOITUONG.LOAIKHO, objSelectedPhieu.LK).Ten
        Dim nnreport As New rptPhieuNhapKho
        nnreport.SetDataSource(ds.Tables(0))
        nnreport.SetParameterValue("ten_dvgn", ten_dvgn)
        nnreport.SetParameterValue("ten_lk", ten_lk)
        nnreport.SetParameterValue("tien_chu", DoiSoRaChu(objSelectedPhieu.TGIATRI))

        If (objSelectedPhieu.NX = "N") Then
            ten_tcnx = CDoiTuongs.GetDoiTuongByMa(enumDOITUONG.TINHCHATNHAP, objSelectedPhieu.TCNX).Ten
            nnreport.SetParameterValue("loai_phieu", "N")
        Else
            ten_tcnx = CDoiTuongs.GetDoiTuongByMa(enumDOITUONG.TINHCHATXUAT, objSelectedPhieu.TCNX).Ten
            nnreport.SetParameterValue("loai_phieu", "X")
        End If
        nnreport.SetParameterValue("ten_tcnx", ten_tcnx)

        '************************************************************************************************
        'Cau truc mot report cua phieu nhap xuat nhu sau:                                               
        'Tong kich thuoc 1 trang A4 ~ 11154 (tinh dua vao tong cac section va cac mat hang co toi da)   
        '1) Section1: 2880                                                                              
        '2) Section2: 1114                                                                              
        '3) PageHeaderSection1: 1080                                                                    
        '       _ GroupHeaderSection2: 327 * K (K: Số lượng kho được nhập vào trong phiếu)              
        '           + Section3: 654*N (=327*2*I với I là số mặt hàng trong phiếu)                       
        '4) ReportFooterSection2: 654 (=327*2)                                                          
        '5) ReportFooterSection1: 3279                                                                  
        '                                                                                               
        ' Dựa vào các Height của các Section trên ta tính được                                          
        ' a)Trang dau: co toi da 22 dong gom mat hang va kho                                            
        ' b)Trang giua: co toi da 27 dong gom mat hang va kho                                           
        ' c)Trang cuoi: co toi da 15 dong gom mat hang va kho                                           
        ' Tuy nhiên khi in phiếu sẽ có trường hợp sau:                                                  
        ' Trang đầu:                                                                                    
        '  + Nếu phiếu nằm gọn trong 1 trang: in được 10 dòng (bao gồm 4 mặt hàng + 2 kho)                  
        '  + Nếu có hơn 1 trang, chỉ in được tối đa 20 dòng (~ 10 mặt hàng) + 2 dòng Kho (do bao giờ    
        '       - Nếu trang đầu có 1 kho thì in được 4 mặt hàng (trống 1 dòng cuối cùng)
        '       - Nếu trang đầu có 2 kho thì in được 4 mặt hàng 
        ' cũng chiếm 1 dòng in Kho ở đầu group, nếu chỉ có 1 kho thì trang đầu bao giờ cũng sẽ bị trống 
        ' 1 dòng cuối)                                                                                  
        ' Trang giữa: được in tối đa 22 dòng (bao gồm 10 mặt hàng và 2 kho)                             
        '    + Nếu chỉ có 1 kho ở trang giữa thì sẽ in được 10 mặt hàng (dòng cuối cùng bị trống)       
        '    + Nếu có 2 kho ở trang giữa thì sẽ in được 10 mặt hàng                                     
        '    + Do đó, Nếu có n kho ở trang giữa thì sẽ in được (22-n)/2 mặt hàng                                     
        ' Trang cuối: được in tối đa 14 dòng                                                            
        '************************************************************************************************

        Dim Section1 As Section = nnreport.ReportDefinition.Sections("Section1")
        Dim Section2 As Section = nnreport.ReportDefinition.Sections("Section2")
        Dim PageHeaderSection1 As Section = nnreport.ReportDefinition.Sections("PageHeaderSection1")
        Dim GroupHeaderSection2 As Section = nnreport.ReportDefinition.Sections("GroupHeaderSection2")
        Dim Section3 As Section = nnreport.ReportDefinition.Sections("Section3")
        Dim ReportFooterSection2 As Section = nnreport.ReportDefinition.Sections("ReportFooterSection2")
        'Dim ReportFooterSection1 As Section = nnreport.ReportDefinition.Sections("ReportFooterSection1")
        Dim height As Integer = GroupHeaderSection2.Height
        'Trường hợp phiếu có số MH <=4 và số Kho <=2 thì sẽ nằm gọn trong 1 trang in
        If Not (countMH <= 4 And countKho <= 2) Then
            Dim frmPrint As New frmPrintPhieuParam(22)
            frmPrint.ShowDialog()
            Dim value As Integer = (327 * 22) / frmPrint.value
            GroupHeaderSection2.Height = value
            Section3.Height = value * 2
            ReportFooterSection2.Height = value * 2
        End If

        'If count > 22 Then
        '    Dim frmPrint As New frmPrintParamater(GroupHeaderSection2.Height)
        '    frmPrint.ShowDialog()
        '    Dim value As Integer = frmPrint.value
        '    GroupHeaderSection2.Height = value
        '    Section3.Height = value * 2
        'Else
        '    'Nếu số dòng của tổng mặt hàng và kho > 10 dòng và < 19 dòng
        '    If count > 10 And count <= 19 Then
        '        'Section1.Height += height * 2
        '        'PageHeaderSection1.Height += height
        '        'Do Section1 cong them 2*GroupHeaderSection2.Height
        '        'Va PageHeaderSection1 cong them GroupHeaderSection2.Height
        '        'nen ta ko lay 22 dong cua trang dau ma lay 19 dong - count
        '        Dim value As Integer = 19 - count
        '        value = (value * height) / count
        '        GroupHeaderSection2.Height += value
        '        Section3.Height += value * 2
        '        ReportFooterSection2.Height += value * 2
        '    ElseIf count > 19 Then
        '        Dim value As Integer = 22 - count
        '        value = (value * height) / count
        '        GroupHeaderSection2.Height += value
        '        Section3.Height += value * 2
        '        ReportFooterSection2.Height += value * 2
        '        'ElseIf count = 10 Then
        '        'ReportFooterSection1.Height -= 278
        '    End If
        'End If
        Dim frm As New frmReportViewer(nnreport)
        frm.ShowDialog()
    End Sub
End Class
